package com.newtouch.bxzs.database.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.newtouch.bxzs.database.model.bo.*;
import com.newtouch.bxzs.database.model.vo.*;

import java.util.List;

/**
 * 用户Service接口:
 *
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2021/1/6 17:33</td>
 * <td>tianshangzhu</td>
 * <td>Create</td>
 * </tr>
 * </table>
 *
 * @author tianshangzhu
 * @version 1.0.0
 * @since 1.0.0
 */
public interface UserService {
    /**
     * 查询后台用户列表信息
     *
     * @param getPcUserListVO 参数
     * @return IPage<PcUserListBO>
     */
    IPage<PcUserListBO> getUserList4Pc(GetPcUserListVO getPcUserListVO);

    /**
     * 查看后台用户详情信息
     *
     * @param userId 用户id
     * @return PcUseDetailBO
     */
    PcUseDetailBO getUserDetail4Pc(String userId);

    /**
     * 添加/修改后台用户信息
     *
     * @param updatePcUserVO 参数
     */
    void savePcUser(UpdatePcUserVO updatePcUserVO);

    /**
     * 删除用户
     *
     * @param userIdList 用户id
     */
    void deletePcUserByUserId(List<String> userIdList);

    /**
     * 重置后台用户登录密码
     *
     * @param userId 用户id
     */
    void resetPassword4Pc(String userId);

    /**
     * 后台用户添加/用户选择接口
     *
     * @param getAppUserListVO 参数
     * @return IPage<AppUserList4AddPcUserBO>
     */
    IPage<AppUserList4AddPcUserBO> getAppUserList4AddPcUser(GetAppUserListVO getAppUserListVO);

    /**
     * 获取登录用户所属机构及以下机构的App用户列表
     *
     * @param getAppUserListVO 参数
     * @return IPage<AppUserListBO>
     */
    IPage<AppUserListBO> getUserList4App(GetAppUserListVO getAppUserListVO);

    /**
     * 根据用户工号展示银行/保险用户详情信息
     *
     * @param userId 用户id
     * @return AppUserDetailBo
     */
    AppUserDetailBO getUserDetail4App(String userId);

    /**
     * 获取用户所有菜单
     *
     * @param getUserMenuListVO 参数
     * @return UserMenuListBO
     */
    UserMenuListBO getUserMenuList(GetUserMenuListVO getUserMenuListVO);

    /**
     * 启用/禁用后台用户
     *
     * @param updateStateVO 参数
     */
    void updatePcUserState(UpdateStateVO updateStateVO);

    /**
     * app端根据机构编码查询用户
     *
     * @param getAppUserVO 参数
     * @return 用户信息
     */
    List<AppSimpleUserBO> getAppSimpleUser(GetAppUserVO getAppUserVO);

    /**
     * 修改用户岗位
     *
     * @param updateUserPositionVO 参数
     */
    void updateUserPosition(UpdateUserPositionVO updateUserPositionVO);
}
